package meow

import meow.Account
import meow.AvatorIcon
import meow.Utils

class MeowTagLib {
  static namespace = "mw"

  def message = {attrs, body ->
    out << body().replaceAll(
        // 文中のURLをリンク化
        /(http:\/\/|https:\/\/){1}[\w\.\-\/:\?=&]+/,
        /<a href="$0" target="_blank">$0<\/a>/
    ).replaceAll(
        // 文中のユーザIDをリンク化
        /@([0-9a-zA-Z_]{1,20}+)( |$)/,
        /@<a href="${request.contextPath}\/$1">$1<\/a> /)
  }

  // MEMO: アイコンの処理がやっつけ感ありありで悲哀が漂う。
  // いっそ，nonameアイコンも静的コンテンツではなく，（DBに
  // 持たすかどうかは別として）コントローラに問い合わせようかな。
  // アイコンの有無を確認するためSQL発行してるんじゃ，静的
  // コンテンツして得した気がしない。:-(

  def profile = {attrs, body ->
    def account = Account.findByUsername(attrs.username)
    def desc = account.description.encodeAsHTML().replaceAll(
        // 文中のURLをリンク化
        /(http:\/\/|https:\/\/){1}[\w\.\-\/:\?=&]+/,
        /<a href="$0" target="_blank">$0<\/a>/
    ).replaceAll("\n", "<br>")
    out << """
<table border="0">
  <tr>
    <td valign="middle" align="center">"""
    if (AvatorIcon.hasIcon(account.username)) {
      out << """<img alt="${account.username}" src="${request.contextPath}/icon/${account.username}"/>"""
    }
    else {
      out << """<img alt="${account.username}" src="${request.contextPath}/images/noname.png">"""
    }
    out << """
    <td valign="middle">
      <h1>${account.username.encodeAsHTML()}</h1>
      ${account.userRealName.encodeAsHTML()}
    </td>
  </tr>
  <tr><td colspan="2"><div class="description">${desc} </div></td></tr>
</table>"""
  }

  def icon = {attrs, body ->
    if (AvatorIcon.hasIcon(attrs.username)) {
      out << """<img alt="${attrs.username}" src="${request.contextPath}/icon/${attrs.username}"/>"""
    }
    else {
      out << """<img alt="${attrs.username}" src="${request.contextPath}/images/noname.png">"""
    }
  }

  def smallicon = {attrs, body ->
    if (AvatorIcon.hasIcon(attrs.username)) {
      out << """<img alt="${attrs.username}" src="${request.contextPath}/smallicon/${attrs.username}"/>"""
    }
    else {
      out << """<img alt="${attrs.username}" src="${request.contextPath}/images/noname-small.png">"""
    }
  }

  def smartdate = {attrs, body ->
    out << Utils.smartDate(attrs.date)
  }
}
